using System;
using ActivUFRJ.Classes.Busca;

namespace ActivUFRJ.Classes.Busca
{
    public class DBBuscarTodoSite : Connection.MySQL
    {
        public DBBuscarTodoSite() : base(ref Connection.DBConnection.myConnection)
        {

        }

        internal ResultadoBusca GetResultadoBusca(ParametrosTodoSite pts)
        {

            try
            {

                ResultadoBusca resultadoBusca = new ResultadoBusca();

                // query q envolve 3 union: busco 1o por usuarios, em seguida por artefatos e depois por comunidades
                // no final, ordeno pelo campo 'Nome'

                // CONSULTA DE USUARIO
                string SQL = "SELECT usuarios.USR_ID as ID, CONCAT(USR_NOME, ' ', USR_SOBRENOME) as Nome, USR_DATA_REGISTRO as DataRegistro, " +
                                "ai_descricao as Categoria, 'Usuario' as Tipo, CONCAT('Usuario.aspx?ID=', USR_ID) as Link " +
                                "from usuarios " +
                                "inner join areas_de_interesse on usuarios.ai_id = areas_de_interesse.ai_id " + 
                                "where 1 = 1";

                                if (pts.IdCategoria > 0) SQL += " AND usuarios.AI_ID = " + pts.IdCategoria.ToString();
                                if (pts.Nome != "") SQL += " AND usuarios.USR_Nome like '%" + pts.Nome.Replace("'", "''") + "%' OR usuarios.USR_Sobrenome like '%" + pts.Nome.Replace("'", "''") + "%'";

                SQL += " UNION ";                
                
                // CONSULTA DE COMUNIDADE
                SQL += "SELECT artefatos.ART_ID as ID, art_nome as Nome, art_DATA_REGISTRO as DataRegistro, " +
                            "ai_descricao as Categoria, 'Artefato' as Tipo, CONCAT('Artefato.aspx?ID=', ART_ID) as Link " +
                            "from artefatos " +
                            "inner join areas_de_interesse on artefatos.ai_id = areas_de_interesse.ai_id " +
                            "where 1 = 1";

                            if (pts.IdCategoria > 0) SQL += " AND artefatos.AI_ID = " + pts.IdCategoria.ToString();
                            if (pts.Nome != "") SQL += " AND artefatos.ART_Nome like '%" + pts.Nome.Replace("'", "''") + "%' OR artefatos.ART_Descricao like '%" + pts.Nome.Replace("'", "''") + "%'";


                SQL += " UNION ";

                // CONSULTA DE ARTEFATOS
                SQL += "SELECT comunidades.COM_ID as ID, COM_nome as Nome, COM_DATA_REGISTRO as DataRegistro, " +
                            "ai_descricao as Categoria, 'Comunidade' as Tipo, CONCAT('Comunidade.aspx?ID=', COM_ID) as Link " +
                            "from comunidades " +
                            "inner join areas_de_interesse on comunidades.ai_id = areas_de_interesse.ai_id " +
                            "where 1 = 1";

                            if (pts.IdCategoria > 0) SQL += " AND comunidades.AI_ID = " + pts.IdCategoria.ToString();
                            if (pts.Nome != "") SQL += " AND comunidades.COM_Nome like '%" + pts.Nome.Replace("'", "''") + "%' OR comunidades.COM_Descricao like '%" + pts.Nome.Replace("'", "''") + "%'";


                // ORDER BY...
                SQL += " order by Nome ";


                System.DateTime inicioBusca = System.DateTime.Now;
                this.SetSQL(SQL);

                // 1. Tempo de busca
                System.TimeSpan tempoTotal = System.DateTime.Now.Subtract(inicioBusca);
                resultadoBusca.TempoDeBusca = Convert.ToDouble(tempoTotal.Milliseconds) / Convert.ToDouble(1000);

                // 2. Pegar os valores da consulta
                resultadoBusca.ResultadoDT = this.ReturnTable();
                
                // 3. # de linhas afetadas
                resultadoBusca.NumeroRegistros = this.GetRowCount();

                return resultadoBusca;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
    }
}
